from PyQt5.Qt import *
#import qdarkstyle

"""
语法规则: 两部分组成，选择器和声明
选择器: 哪些控件会受影响
声明: 哪些属性应该在控件上进行设置

选择器类型
1.通配选择器: *, 匹配所有控件
2.类型选择器: QPushButton, 匹配所有QPushButton类及子类的实例
3.属性选择器: QPushButton[name="myBtn"], 匹配所有的name属性时myBtn的QPushButton实例
4.类选择器: .QPushButton, 匹配QPushButton实例, 但是并不匹配其子类
5.ID选择器: #myButton, 匹配所有ID为myButton的控件，这里的ID实际是objectName指定的值
6.后代选择器: QDialog QPushButton, 匹配所有QDialog容器中包含的QPushButton, 不管是直接的还是间接的
7.子选择器: QDialog>QPushButton, 匹配所有匹配所有QDialog容器中包含的QPushButton, 直接的
注: 以上选择器可以联合使用, 一次设置多个选择器用逗号隔开

QSS伪状态
冒号开头的选择表达式，例如QPushButton:hover{background-color:red;}, 表示鼠标经过时的状态

第三方样式表
QDarkStyleSheet

窗口背景
1.使用QSS设置
2.使用QPaletter设置
3.实现paintEvent, 使用QPainter绘制背景


"""
class MyQWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.setup_ui()

    def setup_ui(self):
        self.setWindowTitle("QSS")
        #self.demo1()
        #self.demo2()
        self.demo3()

    def demo1(self):
        bt1 = QPushButton(self)
        bt1.setText("bt1")
        bt2 = QPushButton(self)
        bt2.setText("bt2")
        vbox = QVBoxLayout()
        vbox.addWidget(bt1)
        vbox.addWidget(bt2)
        self.setLayout(vbox)

    def demo2(self):
        bt1 = QPushButton(self)
        bt1.setText("bt1")
        bt2 = QPushButton(self)
        bt2.setProperty("name", "myBtn")
        bt2.setText("bt2")
        vbox = QVBoxLayout()
        vbox.addWidget(bt1)
        vbox.addWidget(bt2)
        self.setLayout(vbox)

    """
    背景色: 使用background或background-color
    背景图片: setPixmap或setIcon
    """
    def demo3(self):
        self.setWindowTitle("test")

# 测试
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    #app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
    window = MyQWidget()

    # qssStyle = """
    #     QPushButton {
    #         background-color: red
    #     }
    # """

    # qssStyle = """
    #     # QPushButton[name="myBtn"] {
    #     #     background-color: red
    #     # },
    #     QPushButton:hover {
    #         background-color: blue
    #     }
    # """

    # qssStyle = """
    #     QPushButton:hover {
    #         background-color: blue
    #     }
    # """

    window.setObjectName("Test")
    window.setObjectName("Main")
    #window.setStyleSheet(qssStyle)
    window.show()
    sys.exit(app.exec_())